/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logic;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 * Clase Guardar. Librería encargada de manejar almacenar y extraer las bases de datos
 * (BDManage) en archivos y gestionar los errores que estos procesos generen.
 * @author Victoria Fuenmayor y José Gabriel Rivera
 */
public class Guardar {
    
    /**
     * Guarda la base de datos BD (tipo BDManage) en el archivo de nombre indicado,
     * y lo almacena en la dirección donde está ubicado el programa. Emite mensajes
     * de error en el JFrame que se le indique.
     * @param BD Base de datos de la clase BDManage
     * @param nombreBD Nombre con el que se guardará el archivo
     * @param frame Frame donde se desplegarán los errores
     */
    public static void guardar(BDManage BD,String nombreBD, JFrame frame) {
        try {
            ObjectOutputStream outputBD = new ObjectOutputStream(new FileOutputStream(System.getProperty("user.dir")
                    + "\\BD - "+nombreBD+".obj"));
            outputBD.writeObject(BD);
            outputBD.close();
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(frame, "ERROR: Error al guardar las bases de datos " + ex.getMessage());
        }
        
    }

    /**
     * Abre el archivo de bases de datos y extrae la base de datos que se encuentre almacenada.
     * @param nombreBD Nombre de la base de datos que se desea extraer (Debe ser el mismo con el que se guardo)
     * @param frame Frame donde se desplegarán los errores
     * @return Retorna la base de datos que concida con el nombre que se paso por parámetros
     */
    public static BDManage abrir(String nombreBD, JFrame frame) {
        ObjectInputStream inputBD = null; 
        try {
            inputBD = new ObjectInputStream(new FileInputStream(System.getProperty("user.dir")
                    + "\\BD - "+nombreBD+".obj"));
            BDManage BD = (BDManage) inputBD.readObject();
            inputBD.close();
            return BD;
        } catch (ClassNotFoundException ex) {
            JOptionPane.showMessageDialog(frame, "ERROR: No se encontraron las clases correctas: " + ex.getMessage());
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(frame, "AVISO: La Base de datos aún no ha sido creada " + ex.getMessage());
        }
        return null;
    }
}
